import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeDemo {
    public static void main(String[] args) {
        // 创建一个ArrayDeque实例，存储Integer
        Deque<Integer> arrayDeque = new ArrayDeque<>();

        // 1. 添加元素到头部和尾部
        arrayDeque.addFirst(100);
        arrayDeque.offerFirst(200);
        arrayDeque.addLast(300);
        arrayDeque.offerLast(400);

        System.out.println("当前队列: " + arrayDeque);
        //输出：当前队列: [200, 100, 300, 400]


        // 2. 查看头部和尾部元素（不删除）
        System.out.println("头部元素(不删除): " + arrayDeque.getFirst()); // 200
        System.out.println("头部元素(不删除): " + arrayDeque.peekFirst());// 200
        System.out.println("尾部元素(不删除): " + arrayDeque.getLast()); // 400
        System.out.println("尾部元素(不删除): " + arrayDeque.peekLast());// 400

        // 3. 移除头部和尾部元素
        System.out.println("头部元素移除并返回: " + arrayDeque.removeFirst()); // 200
        System.out.println("头部元素移除并返回: " + arrayDeque.pollFirst()); // 100
        System.out.println("尾部元素移除并返回: " + arrayDeque.removeLast()); // 400
        System.out.println("尾部元素移除并返回: " + arrayDeque.pollLast()); // 300

        System.out.println("操作后队列: " + arrayDeque.isEmpty());// true

        // 4. 作为栈使用
        System.out.println("\n作为栈使用:");
        arrayDeque.push(111); // 等同于addFirst
        arrayDeque.push(222);
        arrayDeque.push(333);

        System.out.println("当前栈: " + arrayDeque);// 当前栈: [333, 222, 111]
        System.out.println("查看栈顶: " + arrayDeque.peek()); // 等同于peekFirst  333
        System.out.println("弹出栈顶: " + arrayDeque.pop()); // 等同于removeFirst 333

        // 5. 作为队列使用
        System.out.println("\n作为队列使用:");
        arrayDeque.offer(555); // 等同于offerLast
        arrayDeque.offer(666);

        System.out.println("当前队列: " + arrayDeque);// 当前队列: [222, 111, 555, 666]
        System.out.println("查看队头: " + arrayDeque.peek()); // 等同于peekFirst  222
        System.out.println("移除队头: " + arrayDeque.poll()); // 等同于pollFirst  222
    }
}